package com.moyuaninfo.utils;

import java.math.BigDecimal;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 数学中集合概念的工具类
 *
 * @author 邱祥霸
 * @date 2020/4/9
 */
public class ScopeUtils {

    /**
     * 判断值是否在范围内
     * @param scope 范围<br/>
     *              例子：[0, 10], 大于等于0，小于等于10; (0, 10]，大于0，小于等于10
     *
     * @param value 比较的值
     * @return TRUE: 在范围内，FALSE：不在范围内
     */
    public static  boolean scope(String scope, String value) {
        // 去除空格
        String scopeDue = scope.replaceAll("[\\s]*", "");

        String pattern = "(.*?)([\\d*])[,，]*([\\d.]*)(.*)";
        Pattern r = Pattern.compile(pattern);
        Matcher m = r.matcher(scopeDue);
        if (m.find()) {

            return compare(m.group(1), m.group(2), value) && compare(m.group(4), m.group(3), value);
        }
        return false;
    }

    private static boolean compare(String symbol, String scopeValue, String value) {
        switch (symbol) {
            case "[": {
                return new BigDecimal(value).compareTo(new BigDecimal(scopeValue)) >= 0;
            }
            case "]": {
                return new BigDecimal(value).compareTo(new BigDecimal(scopeValue)) <= 0;
            }
            case "(": {
                return new BigDecimal(value).compareTo(new BigDecimal(scopeValue)) > 0;
            }
            case ")": {
                return new BigDecimal(value).compareTo(new BigDecimal(scopeValue)) < 0;
            }
            default:
        }
        return false;
    }
}
